home *** CD-ROM | disk | FTP | other *** search
-
- /*
- * (a) (C) 1990 by Adobe Systems Incorporated. All rights reserved.
- *
- * (b) If this Sample Code is distributed as part of the Display PostScript
- * System Software Development Kit from Adobe Systems Incorporated,
- * then this copy is designated as Development Software and its use is
- * subject to the terms of the License Agreement attached to such Kit.
- *
- * (c) If this Sample Code is distributed independently, then the following
- * terms apply:
- *
- * (d) This file may be freely copied and redistributed as long as:
- * 1) Parts (a), (d), (e) and (f) continue to be included in the file,
- * 2) If the file has been modified in any way, a notice of such
- * modification is conspicuously indicated.
- *
- * (e) PostScript, Display PostScript, and Adobe are registered trademarks of
- * Adobe Systems Incorporated.
- *
- * (f) THE INFORMATION BELOW IS FURNISHED AS IS, IS SUBJECT TO
- * CHANGE WITHOUT NOTICE, AND SHOULD NOT BE CONSTRUED
- * AS A COMMITMENT BY ADOBE SYSTEMS INCORPORATED.
- * ADOBE SYSTEMS INCORPORATED ASSUMES NO RESPONSIBILITY
- * OR LIABILITY FOR ANY ERRORS OR INACCURACIES, MAKES NO
- * WARRANTY OF ANY KIND (EXPRESS, IMPLIED OR STATUTORY)
- * WITH RESPECT TO THIS INFORMATION, AND EXPRESSLY
- * DISCLAIMS ANY AND ALL WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR PARTICULAR PURPOSES AND NONINFRINGEMENT
- * OF THIRD PARTY RIGHTS.
- */
-
- /*
- * ClockView.h
- *
- * This class handles the drawing of the clock and the moving of the alarm.
- * The clock face is drawn into a bitmap and then composited into the buffered
- * window before drawing the hands. The hands are stored in the server
- * as user paths. Each hand also has a graphic state associated with it. Before
- * hand is drawn, its graphic state is installed and then rotated to its current
- * angle and then the user path is rendered.
- *
- * Most of the literals below are for drawing the clock face and the hands.
- *
- * Version: 2.0
- * Author: Ken Fromm
- * History:
- * 03-07-91 Added this comment.
- */
-
- #import <appkit/View.h>
- #import <appkit/timer.h>
- #import <math.h>
-
- #define CLRVIEW 0.01
- #define CLRCIRC NX_BLACK
-
- #define SIZENUMS 0.75
- #define SIZEDASHES 0.90
-
- #define WIDMIN 3.5
- #define CLRMIN NX_WHITE
- #define LENMIN (19.0/20.0)
- #define DEGMIN (-6.0)
-
- #define WIDHOUR 6.0
- #define CLRHOUR NX_WHITE
- #define LENHOUR (14.0/15.0)
- #define DEGHOUR (-30.0)
-
- #define CLRHANDS NX_WHITE
- #define CLRSECOND NX_LTGRAY
- #define CLRSHADOW 0.20
- #define CLRALARMTOP 0.8
- #define CLRALARMBOT NX_DKGRAY
-
- #define LNWIDSECOND 1.0
- #define LNWIDHANDS 3.0
-
- #define OFFSETHANDSX 1.0
- #define OFFSETHANDSY (-1.0)
- #define OFFSETSHADX 2.0
- #define OFFSETSHADY (-2.0)
-
- #define TICKSEC (-360.0/60.0)
- #define TICKMIN (TICKSEC/60.0)
- #define TICKHOUR (TICKMIN/12.0)
-
- #define MAX_PTS 300
- #define MAX_OPS 150
-
- #define MAX_PTS_HIT 12
- #define MAX_OPS_HIT 6
-
- #define HITSETTING 8
-
- #define RADIAN (M_PI/180)
-
- #define ALARM 0
- #define HOUR 1
- #define MINUTE 2
- #define SHADOW 3
- #define SECOND 4
-
- /*
- * This structure is used to hold the hit detection user path.
- * The infill operator is used which takes a user path and checks
- * to see whether any portion of it is covered by the
- * current path. The user path passed in is a rectangle around
- * the mouse down location. The current path is the alarm hand.
- */
- typedef struct _UPath {
- float * pts;
- int num_pts;
- char *ops;
- int num_ops;
- } UPath;
-
- /*
- * The BOOL arguments specify whether to use gstates or not and
- * whether to use the userpaths stored in the server or send them
- * with each drawing.
- */
- @interface ClockView:View
- {
- id animatorId, imageId, displayTime;
-
- BOOL gstatesOn, upathsServer, trace;
-
- int gstateHour, gstateMin, gstateSec, gstateShad,
- upathHour, upathMin, upathSec, upathAlarmTop, upathAlarmBot;
-
- float angleHour, angleMin, angleSec, angleAlarm,
- totalTime, numIterations;
-
- UPath hitPoint;
- }
-
- - initFrame:(const NXRect *) frameRect;
- - initializeHitPoint;
-
- - free;
-
- - setDisplayTime:anObject;
- - toggleGstate:sender;
- - toggleUpath:sender;
-
- - drawFace;
- - defineUPaths;
- - defineGStates;
-
- - tick:sender;
-
- - sizeTo:(NXCoord)width :(NXCoord)height;
-
- - setAlarm:(NXEvent *)event;
- - setHitPoint:(const NXPoint *)p;
- - (BOOL) isHit:(const NXPoint *) p;
-
- - mouseDown:(NXEvent *)event;
-
- - setStateAndDraw;
- - drawSelf:(NXRect *)r :(int) count;
-
- @end
-